<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   主题：Recommenderlab包实现电影评分预测(R语言)  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript">
   MathJax.Hub.Config({elements: ["bbpress-forums"]});
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://cos.name/cn/topic/150937/",
                  host: "http://cos.name",
                  prePath: "http://cos.name",
                  scheme: "http",
                  pathBase: "http://cos.name/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466441386: Accept with keywords: (title(0.333333333333):预测,评分,主题,电影,R语言,论坛, topn(0.366666666667):均值,帖子,推荐系统,作者,会员,数量,函数,协同,结果,模型,魔法,电影,普通,参数,数据,属性,预测,评分,糖果屋,归一化,用户,算法,用户名,随机,参考资料,主题,R语言,论坛,主站,讨论区).-->
 </head>
 <body class="topic bbpress single single-topic postid-150937 single-author sidebar" onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    主题：Recommenderlab包实现电影评分预测(R语言)
   </h1>
  </div>
  <div class="container" id="xmain">
   <div class="hfeed site" id="page">
    <header class="site-header" id="masthead" role="banner">
     <div id="cos-logo">
      <a href="http://cos.name/cn">
       <img src="http://cos.name/cn/wp-content/themes/COS-forest/images/headers/cos-logo.png"/>
      </a>
     </div>
     <div class="navbar" id="navbar">
      <nav class="navigation main-navigation" id="site-navigation" role="navigation">
       <h3 class="menu-toggle">
        菜单
       </h3>
       <div class="menu-%e8%8f%9c%e5%8d%951-container">
        <ul class="nav-menu" id="menu-%e8%8f%9c%e5%8d%951">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-407772" id="menu-item-407772">
          <a href="http://cos.name/cn/">
           论坛首页
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-407773" id="menu-item-407773">
          <a href="http://cos.name/cn/forums/">
           讨论区
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-407774" id="menu-item-407774">
          <a href="http://cos.name/cn/wp-login.php?action=register">
           注册
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-407819" id="menu-item-407819">
          <a href="http://cos.name/">
           主站
          </a>
         </li>
        </ul>
       </div>
      </nav>
      <!-- #site-navigation -->
     </div>
     <!-- #navbar -->
    </header>
    <!-- #masthead -->
    <div class="site-main" id="main">
     <div class="content-area" id="primary">
      <div class="site-content" id="content" role="main">
       <article class="post-150937 topic type-topic status-publish hentry" id="post-150937">
        <header class="entry-header">
         <h1 class="entry-title">
          Recommenderlab包实现电影评分预测(R语言)
         </h1>
        </header>
        <!-- .entry-header -->
        <div class="entry-content">
         <div id="bbpress-forums">
          <div class="bbp-breadcrumb">
           <p>
            <a class="bbp-breadcrumb-home" href="http://cos.name/cn/">
             COS论坛 | 统计之都
            </a>
            <span class="bbp-breadcrumb-sep">
             ›
            </span>
            <a class="bbp-breadcrumb-root" href="http://cos.name/cn/forums/">
             讨论区
            </a>
            <span class="bbp-breadcrumb-sep">
             ›
            </span>
            <a class="bbp-breadcrumb-forum" href="http://cos.name/cn/forum/software/">
             软件应用
            </a>
            <span class="bbp-breadcrumb-sep">
             ›
            </span>
            <a class="bbp-breadcrumb-forum" href="http://cos.name/cn/forum/software/r-language/">
             S-Plus &amp; R语言
            </a>
            <span class="bbp-breadcrumb-sep">
             ›
            </span>
            <span class="bbp-breadcrumb-current">
             Recommenderlab包实现电影评分预测(R语言)
            </span>
           </p>
          </div>
          <div class="bbp-template-notice info">
           <p class="bbp-topic-description">
            该主题包含 5 条回复，4个帖子，最后由
            <a class="bbp-author-avatar" href="http://cos.name/cn/profile/zhaopei/" rel="nofollow" title="查看芊荨魔法糖果屋的档案">
             <img src="http://sdn.geekzu.org/avatar/e24030662b14bb97d1856b51e33cfdac?s=14&amp;d=monsterid&amp;r=g"/>
            </a>
            <a class="bbp-author-name" href="http://cos.name/cn/profile/zhaopei/" rel="nofollow" title="查看芊荨魔法糖果屋的档案">
             芊荨魔法糖果屋
            </a>
            在
            <a href="http://cos.name/cn/topic/150937/#post-411904" title="回复：Recommenderlab包实现电影评分预测(R语言)">
             11 月 之前
            </a>
            更新。
           </p>
          </div>
          <div class="bbp-pagination">
           <div class="bbp-pagination-count">
            查看 6 个帖子 - 1 到 6（总计 6 个）
           </div>
           <div class="bbp-pagination-links">
           </div>
          </div>
          <ul class="forums bbp-replies" id="topic-150937-replies">
           <li class="bbp-header">
            <div class="bbp-reply-author">
             作者
            </div>
            <!-- .bbp-reply-author -->
            <div class="bbp-reply-content">
             帖子
            </div>
            <!-- .bbp-reply-content -->
           </li>
           <!-- .bbp-header -->
           <li class="bbp-body">
            <div class="bbp-reply-header" id="post-150937">
             <div class="bbp-meta">
              <span class="bbp-reply-post-date">
               2014年2月20日 上午6:10
              </span>
              <a class="bbp-reply-permalink" href="http://cos.name/cn/topic/150937/#post-150937">
               1 楼
              </a>
              <span class="bbp-admin-links">
              </span>
             </div>
             <!-- .bbp-meta -->
            </div>
            <!-- #post-150937 -->
            <div class="odd bbp-parent-forum-999 bbp-parent-topic-150937 bbp-reply-position-1 user-id-384036 topic-author post-150937 topic type-topic status-publish hentry">
             <div class="bbp-reply-author">
              <a class="bbp-author-avatar" href="http://cos.name/cn/profile/384036/" rel="nofollow" title="查看野蛮人的档案">
               <img src="http://sdn.geekzu.org/avatar/133345d351988b5794ec0c88a6d6565e?s=80&amp;d=monsterid&amp;r=g"/>
              </a>
              <br/>
              <a class="bbp-author-name" href="http://cos.name/cn/profile/384036/" rel="nofollow" title="查看野蛮人的档案">
               野蛮人
              </a>
              <br/>
              <div class="bbp-author-role">
               普通会员
              </div>
             </div>
             <!-- .bbp-reply-author -->
             <div class="bbp-reply-content">
              <p>
               1 获取电影数据
               <br/>
               电影数据来源于http://grouplens.org/datasets/movielens/ 网站，本文分析的数据是MovieLens 100k，总共有100,000个评分，来自1000用户对1700部电影。
              </p>
              <p>
               2 数据准备和清理
               <br/>
               设置好工程路径后，可用读入数据，注意数据的格式，第一列是user id，第二列是item id，第三列是rating，第四列是时间戳，时间戳这里用不到，可去掉。
              </p>
              <pre class="highlight ">&gt; ml100k &lt;- read.table("u.data", header = F, stringsAsFactors = T)
&gt; head(ml100k)
   V1  V2 V3        V4
1 196 242  3 881250949
2 186 302  3 891717742
3  22 377  1 878887116
&gt; ml100k &lt;- ml100k[, -4]
</pre>
              <p>
               可以简单看下rating的分布情况
              </p>
              <pre class="highlight ">&gt; prop.table(table(ml100k[, 3]))
         1          2          3          4          5
0.06106870 0.12977099 0.41984733 0.32061069 0.06870229
&gt; summary(ml100k[, 3])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
  1.000   3.000   3.000   3.206   4.000   5.000     812
</pre>
              <p>
               3 stars和4 stars数量最多，接近总数的75%，1 stars和5 stars的数量最少，和预期的一致。
               <br/>
               数据格式和我们想要的行为user，列为item的ratingMatrix还有很大的差距，对此可以使用reshape包的cast进行转换，注意转换后的缺失值默认为NA。
              </p>
              <pre class="highlight ">&gt; library(reshape)
&gt; ml100k &lt;- cast(ml100k, V1 ~ V2, value = "V3")
&gt; ml.useritem[1:3, 1:6]
   1  2  3  4  5  6
1  5  3  4  3  3  5
2  4 NA NA NA NA NA
3 NA NA NA NA NA NA
</pre>
              <p>
               到此，把数据整理成ratingMatrix，接下来利用recommenderlab处理数据。
              </p>
              <p>
               3 commenderlab处理数据
               <br/>
               在用commenderlab处理数据之前，需将数据转换为realRatingMatrix类型，这是commenderlab包中专门针对1-5 star的一个新类，需要从matrix转换得到。上文获得的ml.useritem有两个类属性，其中cast_df是不能直接转换为matrix的，因此需要去掉这个类属性，只保留data.frame
              </p>
              <pre class="highlight ">&gt; class(ml.useritem)
[1] "cast_df"    "data.frame"
&gt; class(ml.useritem) &lt;- "data.frame"    ##只保留data.frame的类属性
&gt; ml.useritem &lt;- as.matrix(ml.useritem)
&gt; ml.ratingMatrix &lt;- as(ml.useritem, "realRatingMatrix")  ##转换为realRatingMatrix
&gt; ml.ratingMatrix
943 x 1682 rating matrix of class ‘realRatingMatrix’ with 100000 ratings.
</pre>
              <p>
               ml.ratingMatrix是可以用recommenderlab进行处理的realRatingMatrix，943是user数，1682指的是item数, realRatingMatrix可以很方便的转换为matrix和list
              </p>
              <pre class="highlight ">&gt; as(ml.ratingMatrix , "matrix")[1:3, 1:10]
   1  2  3  4  5  6  7  8  9 10
1  5  3  4  3  3  5  4  1  5  3
2  4 NA NA NA NA NA NA NA NA  2
3 NA NA NA NA NA NA NA NA NA NA
&gt; as(ml.ratingMatrix , "list")[[1]][1:10]
 1  2  3  4  5  6  7  8  9 10
 5  3  4  3  3  5  4  1  5  3
</pre>
              <p>
               另外，recommenderlab包中有提供用于归一化的函数normalize，默认是均值归一化x – mean，建立推荐模型的函数，里面有归一化处理的，在此不必单独进行归一化。
              </p>
              <p>
               4 recommender简单介绍
               <br/>
               在建模之前可以先看下针对realRatingMatrix，recommederlab有提供那些推荐技术，总共有6种，我们会用到其中的三种random(随机推荐)，popular（基于流行度推荐）,ibcf(基于项目协同过滤)
              </p>
              <pre class="highlight ">&gt; recommenderRegistry$get_entries(dataType = "realRatingMatrix")
$IBCF_realRatingMatrix
Recommender method: IBCF  ##基于项目协同过滤
Description: Recommender based on item-based collaborative filtering (real data).
Parameters:
   k method normalize normalize_sim_matrix alpha na_as_zero minRating
1 30 Cosine    center                FALSE   0.5      FALSE        NA
$PCA_realRatingMatrix    ##主成份分析
Recommender method: PCA
Description: Recommender based on PCA approximation (real data).
Parameters:
  categories method normalize normalize_sim_matrix alpha na_as_zero minRating
1         20 Cosine    center                FALSE   0.5      FALSE        NA
$POPULAR_realRatingMatrix  ##基于流行度推荐
Recommender method: POPULAR
Description: Recommender based on item popularity (real data).
Parameters: None
$RANDOM_realRatingMatrix   ##随机推荐
Recommender method: RANDOM
Description: Produce random recommendations (real ratings).
Parameters: None
$SVD_realRatingMatrix   ##奇异值分解
Recommender method: SVD
Description: Recommender based on SVD approximation (real data).
Parameters:
  categories method normalize normalize_sim_matrix alpha treat_na minRating
1         50 Cosine    center                FALSE   0.5   median        NA
$UBCF_realRatingMatrix   ##基于用户协同过滤
Recommender method: UBCF
Description: Recommender based on user-based collaborative filtering (real data).
Parameters:
  method nn sample normalize minRating
1 cosine 25  FALSE    center        NA
</pre>
              <p>
               以IBCF为例简单介绍参数的含义
               <br/>
               K：取多少个最相似的item，默认为30
               <br/>
               method :相似度算法，默认采用余弦相似算法cosine
               <br/>
               Normalize：采用何种归一化算法，默认均值归一化x –mean
               <br/>
               normalize_sim_matrix：是否对相似矩阵归一化，默认为否
               <br/>
               alpha:alpha参数值，默认为0.5
               <br/>
               na_as_zero：是否将NA作为0，默认为否
               <br/>
               minRating：最小评分，默认不设置
               <br/>
               这些参数均可在建立模型时设置，本文全部采用默认参数。
              </p>
              <p>
               5 建立推荐模型
               <br/>
               recommender是recommenderlab包中用于建立模型的函数，用法也相当简单，注意在调用recommender之前需给矩阵的所有列按照itemlabels进行列命名。
              </p>
              <pre class="highlight ">&gt; colnames(ml.ratingMatrix) &lt;- paste("M", 1:1682, sep = "")
&gt; as(ml.ratingMatrix[1,1:10], "list")
$&lt;code&gt;1&lt;/code&gt;
 M1  M2  M3  M4  M5  M6  M7  M8  M9 M10
  5   3   4   3   3   5   4   1   5   3
##【Warning】在建立推荐模型之前一定要给item按照itemLabels进行命名，否则会有如下错误
##Error in validObject(.Object) :
##  invalid class “topNList” object: invalid object for slot "itemLabels" in class "topNList": got class "NULL", should be or extend class "character"
&gt; ml.recommModel &lt;- Recommender(ml.ratingMatrix[1:800], method = "IBCF")
&gt; ml.recommModel
Recommender of type ‘POPULAR’ for ‘realRatingMatrix’
learned using 800 users.
</pre>
              <p>
               模型建立以后，可以用来进行预测和推荐了，同样使用predict函数，这里分别给801-803三个用户进行推荐，predict函数有一个type参数，可用来设置是top-n推荐还是评分预测，默认是top-n推荐。
              </p>
              <pre class="highlight ">##TopN推荐，n = 5 表示Top5推荐
&gt; ml.predict1 &lt;- predict(ml.recommModel, ml.ratingMatrix[801:803], n = 5)
&gt; ml.predict1
Recommendations as ‘topNList’ with n = 5 for 3 users.
&gt; as( ml.predict1, "list")  ##显示三个用户的Top3推荐列表
[[1]]
[1] "M50"  "M100" "M127" "M98"  "M174"
[[2]]
[1] "M50"  "M100" "M127" "M174" "M313"
[[3]]
[1] "M50"  "M100" "M127" "M98"  "M174"
##用户对item的评分预测
&gt; ml.predict2 &lt;- predict(ml.recommModel, ml.ratingMatrix[801:803], type = "ratings")
&gt; ml.predict2
&gt; as(ml.predict2, "matrix")[1:3, 1:6]   ##查看三个用于对M1-6的预测评分，注意：实际的预测评分还要在此基础上加上用户的平均评分
           M1         M2        M3          M4         M5        M6
801 0.2909692 -0.2749699 -0.350463 -0.02231146 -0.2300878 0.2049403
802 0.2909692 -0.2749699 -0.350463 -0.02231146 -0.2300878 0.2049403
803 0.2909692 -0.2749699 -0.350463 -0.02231146 -0.2300878 0.2049403
</pre>
              <p>
               6 模型的评估
               <br/>
               本文只考虑评分预测模型的评估，对于Top-N推荐模型请查看后面的参考资料，对于评分预测模型的评估，最经典的参数是RMSE(均平方根误差)
              </p>
              <pre class="highlight ">rmse &lt;- function(actuals, predicts)
{
	sqrt(mean((actuals - predicts)^2, na.rm = T))
}
</pre>
              <p>
               幸运的是，recommenderlab包有提供专门的评估方案，对应的函数是evaluationScheme，能够设置采用n-fold交叉验证还是简单的training/train分开验证，本文采用后一种方法，即将数据集简单分为training和test，在training训练模型，然后在test上评估。
              </p>
              <pre class="highlight ">&gt; model.eval &lt;- evaluationScheme(ml.ratingMatrix[1:943], method = "split",
+ train = 0.9, given = 15, goodRating = 5)
&gt; model.eval
Evaluation scheme with 15 items given
Method: ‘split’ with 1 run(s).
Training set proportion: 0.900
Good ratings: &gt;=5.000000
Data set: 943 x 1682 rating matrix of class ‘realRatingMatrix’ with 100000 ratings.
##分别用RANDOM、UBCF、IBCF建立预测模型
&gt; model.random &lt;- Recommender(getData(model.eval, "train"), method = "RANDOM")
&gt; model.ubcf &lt;- Recommender(getData(model.eval, "train"), method = "UBCF")
&gt; model.ibcf &lt;- Recommender(getData(model.eval, "train"), method = "IBCF")
##分别根据每个模型预测评分
&gt; predict.random &lt;- predict(model.random, getData(model.eval, "known"), type = "ratings")
&gt; predict.ubcf &lt;- predict(model.ubcf, getData(model.eval, "known"), type = "ratings")
&gt; predict.ibcf &lt;- predict(model.ibcf, getData(model.eval, "known"), type = "ratings")
</pre>
              <p>
               这里简单介绍，数据集是如何划分的，其实很简单，对于用户没有评分过的items，是没法进行模型评估的，因为预测值没有参照对象。getData的参数given便是来设置用于预测的items数量。
              </p>
              <p>
               接下来计算RMSE，对比三个模型的评估参数，calcPredictionError函数可以计算出MAE（绝对值均方误差）、MSE和RMSE。
              </p>
              <pre class="highlight ">&gt; error &lt;- rbind(
+ calcPredictionError(predict.random, getData(model.eval, "unknown")),
+ calcPredictionError(predict.ubcf, getData(model.eval, "unknown")),
+ calcPredictionError(predict.ibcf, getData(model.eval, "unknown")))
&gt; rownames(error) &lt;- c("RANDOM", "UBCF", "IBCF")
&gt; error
             MAE      MSE     RMSE
RANDOM 1.7267304 4.486820 2.118211
UBCF   0.8254453 1.062409 1.030732
IBCF   0.8444152 1.333968 1.154976
</pre>
              <p>
               为了更好的说明RMSE与training/test ratio、given等参数的关系，我们可以进行多组的比较。
              </p>
              <p>
               从上面的两张图可以得出如下结论：
               <br/>
               1、training/test ratio对RMSE没什么影响，并不是training比重越大RMSE越小，因此在实际过程中可适当降低training的比例，减少建立模型所需时间；
               <br/>
               2、given值对协同过滤的推荐系统影响很多，given越大(用于预测items数量)RMSE越小，当然这里最大given值为20，在[1, 20]范围内，显然given = 20是最优的；
               <br/>
               3、基于用户的协同过滤表现好，随机推荐最差，另外，items的数量超过2倍的用户数，因此无论从降低RMSE还是提高模型性能来说，UBCF都是最好的选择。有兴趣的童鞋还可以尝试分析近邻数K、相似度算法和RMSE的关系。
               <br/>
               在《recommender system handbook》的4.2.5节，很详细对比了IBCF和UBCF，再结合以上的数据，可以很好的理解为什么在这个案例中UBCF要明显优于IBCF。
              </p>
              <p>
               7 参考资料
               <br/>
               [1] recommender system handbook
               <br/>
               [2] Item-Based Collaborative Filtering Recommendation Algorithms
               <br/>
               [3] recommenderlab: A Framework for Developing and Testing Recommendation Algorithms
              </p>
             </div>
             <!-- .bbp-reply-content -->
            </div>
            <!-- .reply -->
            <div class="bbp-reply-header" id="post-395299">
             <div class="bbp-meta">
              <span class="bbp-reply-post-date">
               2014年2月20日 上午6:14
              </span>
              <a class="bbp-reply-permalink" href="http://cos.name/cn/topic/150937/#post-395299">
               2 楼
              </a>
              <span class="bbp-admin-links">
              </span>
             </div>
             <!-- .bbp-meta -->
            </div>
            <!-- #post-395299 -->
            <div class="even bbp-parent-forum-999 bbp-parent-topic-150937 bbp-reply-position-2 user-id-384036 topic-author post-395299 reply type-reply status-publish hentry">
             <div class="bbp-reply-author">
              <a class="bbp-author-avatar" href="http://cos.name/cn/profile/384036/" rel="nofollow" title="查看野蛮人的档案">
               <img src="http://sdn.geekzu.org/avatar/133345d351988b5794ec0c88a6d6565e?s=80&amp;d=monsterid&amp;r=g"/>
              </a>
              <br/>
              <a class="bbp-author-name" href="http://cos.name/cn/profile/384036/" rel="nofollow" title="查看野蛮人的档案">
               野蛮人
              </a>
              <br/>
              <div class="bbp-author-role">
               普通会员
              </div>
             </div>
             <!-- .bbp-reply-author -->
             <div class="bbp-reply-content">
              <p>
               实在不知道如何贴图，无图版本大家将就看吧，欢迎交流[s:11]
              </p>
             </div>
             <!-- .bbp-reply-content -->
            </div>
            <!-- .reply -->
            <div class="bbp-reply-header" id="post-395317">
             <div class="bbp-meta">
              <span class="bbp-reply-post-date">
               2014年2月20日 上午11:06
              </span>
              <a class="bbp-reply-permalink" href="http://cos.name/cn/topic/150937/#post-395317">
               3 楼
              </a>
              <span class="bbp-admin-links">
              </span>
             </div>
             <!-- .bbp-meta -->
            </div>
            <!-- #post-395317 -->
            <div class="odd bbp-parent-forum-999 bbp-parent-topic-150937 bbp-reply-position-3 user-id-82234 post-395317 reply type-reply status-publish hentry">
             <div class="bbp-reply-author">
              <a class="bbp-author-avatar" href="http://cos.name/cn/profile/82234/" rel="nofollow" title="查看bigknife的档案">
               <img src="http://sdn.geekzu.org/avatar/2d96292d60000df78116dd2e7169da19?s=80&amp;d=monsterid&amp;r=g"/>
              </a>
              <br/>
              <a class="bbp-author-name" href="http://cos.name/cn/profile/82234/" rel="nofollow" title="查看bigknife的档案">
               bigknife
              </a>
              <br/>
              <div class="bbp-author-role">
               普通会员
              </div>
             </div>
             <!-- .bbp-reply-author -->
             <div class="bbp-reply-content">
              <p>
               回复 第2楼 的 野蛮人：论坛里贴图不方便，最好还是上主站吧。发邮件给我们：contact (at) cos.name，我们会给你生成一个主站作者的账号，在那里发布文章。
              </p>
              <p>
               具体请见：http://cos.name/2008/11/how-to-work-with-cos/
              </p>
             </div>
             <!-- .bbp-reply-content -->
            </div>
            <!-- .reply -->
            <div class="bbp-reply-header" id="post-395324">
             <div class="bbp-meta">
              <span class="bbp-reply-post-date">
               2014年2月20日 下午1:09
              </span>
              <a class="bbp-reply-permalink" href="http://cos.name/cn/topic/150937/#post-395324">
               4 楼
              </a>
              <span class="bbp-admin-links">
              </span>
             </div>
             <!-- .bbp-meta -->
            </div>
            <!-- #post-395324 -->
            <div class="even bbp-parent-forum-999 bbp-parent-topic-150937 bbp-reply-position-4 user-id-384036 topic-author post-395324 reply type-reply status-publish hentry">
             <div class="bbp-reply-author">
              <a class="bbp-author-avatar" href="http://cos.name/cn/profile/384036/" rel="nofollow" title="查看野蛮人的档案">
               <img src="http://sdn.geekzu.org/avatar/133345d351988b5794ec0c88a6d6565e?s=80&amp;d=monsterid&amp;r=g"/>
              </a>
              <br/>
              <a class="bbp-author-name" href="http://cos.name/cn/profile/384036/" rel="nofollow" title="查看野蛮人的档案">
               野蛮人
              </a>
              <br/>
              <div class="bbp-author-role">
               普通会员
              </div>
             </div>
             <!-- .bbp-reply-author -->
             <div class="bbp-reply-content">
              <p>
               回复 第3楼 的 bigknife：好的，谢谢了
              </p>
             </div>
             <!-- .bbp-reply-content -->
            </div>
            <!-- .reply -->
            <div class="bbp-reply-header" id="post-395852">
             <div class="bbp-meta">
              <span class="bbp-reply-post-date">
               2014年2月25日 上午11:30
              </span>
              <a class="bbp-reply-permalink" href="http://cos.name/cn/topic/150937/#post-395852">
               5 楼
              </a>
              <span class="bbp-admin-links">
              </span>
             </div>
             <!-- .bbp-meta -->
            </div>
            <!-- #post-395852 -->
            <div class="odd bbp-parent-forum-999 bbp-parent-topic-150937 bbp-reply-position-5 user-id-377380 post-395852 reply type-reply status-publish hentry">
             <div class="bbp-reply-author">
              <a class="bbp-author-avatar" href="http://cos.name/cn/profile/377380/" rel="nofollow" title="查看superdesolator的档案">
               <img src="http://sdn.geekzu.org/avatar/9f8761804198aac65fc161f7cb157d00?s=80&amp;d=monsterid&amp;r=g"/>
              </a>
              <br/>
              <a class="bbp-author-name" href="http://cos.name/cn/profile/377380/" rel="nofollow" title="查看superdesolator的档案">
               superdesolator
              </a>
              <br/>
              <div class="bbp-author-role">
               普通会员
              </div>
             </div>
             <!-- .bbp-reply-author -->
             <div class="bbp-reply-content">
              <p>
               回复 第2楼 的 野蛮人：阅读完了，收获颇丰，第2段的ml.useritem出现有点突然，我这个新手研究了半天，发现省略了
              </p>
              <pre class="highlight ">ml.useritem=ml100k[,-1]</pre>
              <p>
               这段代码，还有在
              </p>
              <pre class="highlight ">&gt; ml.recommModel &lt;- Recommender(ml.ratingMatrix[1:800], method = "IBCF")
&gt; ml.recommModel
Recommender of type ‘POPULAR’ for ‘realRatingMatrix’
learned using 800 users.</pre>
              <p>
               的时候为什么下面会显示POPULAR而用的方法是IBCF?
               <br/>
               最后提出问题：.在预测801-803 3个用户给他们推荐的时候，推荐的结果和为比如901-903 3个用户推荐的结果一样吗？我猜应该不一样，但是为什么呢？对于一个新用户应该就无法推荐电影了吧？是不是说1600多部电影，如果我看了其中3部并打了5星，然后综合其它800人的结果，发现如果我这3部打了5星，那其它哪些有可能同时被打5星，然后把它们推荐给我，是这个意思吗？这个意思是不是要求大家的品味都一样呢
               <br/>
               又假设一个新用户，由于是新用户必定只会先看1600部其中一部，他给了4星，然后我们的推荐系统就只能凭这一个item给他推荐吧？
              </p>
             </div>
             <!-- .bbp-reply-content -->
            </div>
            <!-- .reply -->
            <div class="bbp-reply-header" id="post-411904">
             <div class="bbp-meta">
              <span class="bbp-reply-post-date">
               2015年7月20日 下午9:24
              </span>
              <a class="bbp-reply-permalink" href="http://cos.name/cn/topic/150937/#post-411904">
               6 楼
              </a>
              <span class="bbp-admin-links">
              </span>
             </div>
             <!-- .bbp-meta -->
            </div>
            <!-- #post-411904 -->
            <div class="even bbp-parent-forum-999 bbp-parent-topic-150937 bbp-reply-position-6 user-id-421513 post-411904 reply type-reply status-publish hentry">
             <div class="bbp-reply-author">
              <a class="bbp-author-avatar" href="http://cos.name/cn/profile/zhaopei/" rel="nofollow" title="查看芊荨魔法糖果屋的档案">
               <img src="http://sdn.geekzu.org/avatar/e24030662b14bb97d1856b51e33cfdac?s=80&amp;d=monsterid&amp;r=g"/>
              </a>
              <br/>
              <a class="bbp-author-name" href="http://cos.name/cn/profile/zhaopei/" rel="nofollow" title="查看芊荨魔法糖果屋的档案">
               芊荨魔法糖果屋
              </a>
              <br/>
              <div class="bbp-author-role">
               普通会员
              </div>
             </div>
             <!-- .bbp-reply-author -->
             <div class="bbp-reply-content">
              <p>
               Q1.执行prop.table(table(ml100k[, 3]))的结果和截图不一样
              </p>
              <p>
               1 2 3 4 5
               <br/>
               0.06110 0.11370 0.27145 0.34174 0.21201
              </p>
              <p>
               Q2.执行&gt; summary(ml100k[, 3])的结果也和截图不一样
               <br/>
               Min. 1st Qu. Median Mean 3rd Qu. Max.
               <br/>
               1.00 3.00 4.00 3.53 4.00 5.00
              </p>
              <p>
               Q3.执行该语句，结果和本文截图不一样，需要把1:6改为1:7，才会出现6列，且V1列是怎么回事呀
               <br/>
               ml.useritem ml.useritem[1:3, 1:7]#把数据整理成ratingMatrix
               <br/>
               V1 1 2 3 4 5 6
               <br/>
               1 1 5 3 4 3 3 5
               <br/>
               2 2 4 NA NA NA NA NA
               <br/>
               3 3 NA NA NA NA NA NA
              </p>
              <p>
               Q4.在计算RMSE时，calcPredictionError(）函数提示错误,找不到该函数~
              </p>
             </div>
             <!-- .bbp-reply-content -->
            </div>
            <!-- .reply -->
           </li>
           <!-- .bbp-body -->
           <li class="bbp-footer">
            <div class="bbp-reply-author">
             作者
            </div>
            <div class="bbp-reply-content">
             帖子
            </div>
            <!-- .bbp-reply-content -->
           </li>
           <!-- .bbp-footer -->
          </ul>
          <!-- #topic-150937-replies -->
          <div class="bbp-pagination">
           <div class="bbp-pagination-count">
            查看 6 个帖子 - 1 到 6（总计 6 个）
           </div>
           <div class="bbp-pagination-links">
           </div>
          </div>
          <div class="bbp-no-reply" id="no-reply-150937">
           <div class="bbp-template-notice">
            <p>
             您必须先登录才能回复该主题。
            </p>
           </div>
          </div>
         </div>
        </div>
        <!-- .entry-content -->
        <footer class="entry-meta">
        </footer>
        <!-- .entry-meta -->
       </article>
       <!-- #post -->
       <div class="comments-area" id="comments">
       </div>
       <!-- #comments -->
      </div>
      <!-- #content -->
     </div>
     <!-- #primary -->
     <div class="sidebar-container" id="tertiary" role="complementary">
      <div class="sidebar-inner">
       <div class="widget-area">
        <aside class="widget bbp_widget_login" id="bbp_login_widget-2">
         <h3 class="widget-title">
          登录
         </h3>
         <form action="http://cos.name/cn/wp-login.php" class="bbp-login-form" method="post">
          <fieldset>
           <legend>
            登录
           </legend>
           <div class="bbp-username">
            <label for="user_login">
             用户名:
            </label>
           </div>
           <div class="bbp-password">
            <label for="user_pass">
             密码:
            </label>
           </div>
           <div class="bbp-remember-me">
            <label for="rememberme">
             记住用户名
            </label>
           </div>
           <div class="bbp-submit-wrapper">
            <button class="button submit user-submit" id="user-submit" name="user-submit" tabindex="104" type="submit">
             登录
            </button>
           </div>
           <div class="bbp-login-links">
            <a class="bbp-register-link" href="http://cos.name/cn/wp-login.php?action=register" title="注册">
             注册
            </a>
            <a class="bbp-lostpass-link" href="http://cos.name/cn/wp-login.php?action=lostpassword" title="忘记密码">
             忘记密码
            </a>
           </div>
          </fieldset>
         </form>
        </aside>
        <aside class="widget widget_text" id="text-7">
         <h3 class="widget-title">
          搜索
         </h3>
         <div class="textwidget">
          <form action="http://www.google.com/search" id="bbp-search-form" method="get" onsubmit="Gsitesearch(this)" role="search">
           <div>
           </div>
          </form>
          <form id="bbp-search-form-baidu" onsubmit="g(this)" role="search">
           <div>
           </div>
          </form>
         </div>
        </aside>
        <aside class="widget widget_text" id="text-2">
         <h3 class="widget-title">
          新鲜事
         </h3>
         <div class="textwidget">
          <ul>
           <li>
            <a href="http://cos.name/cn/topics/">
             最新帖子
            </a>
           </li>
           <li>
            <a href="http://cos.name/cn/view/popular/">
             最热门主题
            </a>
           </li>
           <li>
            <a href="http://cos.name/cn/view/no-replies/">
             消灭零回复
            </a>
           </li>
          </ul>
         </div>
        </aside>
        <aside class="widget widget_text" id="text-3">
         <h3 class="widget-title">
          RSS订阅
         </h3>
         <div class="textwidget">
          <ul>
           <li>
            <img src="http://cos.name/wp-includes/images/rss.png"/>
            <a href="http://cos.name/cn/topics/feed/">
             所有主题
            </a>
           </li>
           <li>
            <img src="http://cos.name/wp-includes/images/rss.png"/>
            <a href="http://cos.name/cn/forums/feed/">
             所有帖子
            </a>
           </li>
          </ul>
         </div>
        </aside>
       </div>
       <!-- .widget-area -->
      </div>
      <!-- .sidebar-inner -->
     </div>
     <!-- #tertiary -->
    </div>
    <!-- #main -->
    <footer class="site-footer" id="colophon" role="contentinfo">
     <div class="site-info">
      版权所有 © 2014 统计之都 | 由
      <a href="http://wordpress.org/">
       WordPress
      </a>
      构建 | 主题修改自
      <a href="http://wordpress.org/themes/twentythirteen">
       Twenty Thirteen
      </a>
     </div>
     <!-- .site-info -->
    </footer>
    <!-- #colophon -->
   </div>
   <!-- #page -->
  </div>
 </body>
</html>